﻿#ifndef SCRIPTMANAGER_SIGNALHANDLER_H
#define SCRIPTMANAGER_SIGNALHANDLER_H

#include <QObject>
#include <QStringList>
#include "API_ScriptManager.h"
#include "BaseModule/GlobalEnums.h"


namespace ScriptManager
{
    class PythonAgent;

    class API_SCRIPTMANAGER SignalHandler : public QObject
    {
        Q_OBJECT

    public:
        static SignalHandler* getInstance();
    
        void cleanup();

    private slots:

        /// @brief 执行脚本操作类型管理
        /// @param type 脚本操作类型
        void slot_execScriptManager(BaseModule::EScriptManager type);

        /// @brief 执行python代码列表
        /// @param codes python代码列表
        /// @param save 是否保存
        /// @param exec 是否执行
        void slot_execPYCode(QStringList codes, bool save = true, bool exec = true);

        /// @brief 执行脚本文件
        /// @param filePath 文件路径
        /// @param isNoGui 是否是命令行模式
        /// @param listPara 参数列表
        /// @return 是否执行成功
        bool slot_execScriptFile(QString filePath, bool isNoGui, QStringList listPara);

        /// @brief 保存脚本
        /// @param filePath 文件路径
        void slot_saveScript(QString filePath);

        /// @brief 编辑脚本
        /// @param filePath 文件路径
        void slot_editScript(QString filePath, QString text);

        /// @brief 执行案例脚本中的python代码
        /// @param listCode python代码列表
        void slot_execExampleScriptCode(QStringList listCode);

        /// @brief 执行python代码脚本，并且在脚本运行前执行一些其它python代码
        /// @param filePath 脚本文件路径
        /// @param listCode python代码列表
        void slot_execSmartScriptCode(QString filePath, QStringList listCode);

        /// @brief 设置python是否为调试模式
        /// @param isDebug 是否为调试模式
        void slot_setPythonIsDebug(bool isDebug);

    private:
        SignalHandler();
        ~SignalHandler() = default;

    private:
        static SignalHandler* m_instance;
        PythonAgent* m_pythonAgent{};
        bool m_isGUI{ false };
    };

}

#endif
